broadway: Add opacity node
authorAlexander Larsson <alexl@redhat.com>
Wed, 22 Nov 2017 16:28:44 +0000 (17:28 +0100)
committerAlexander Larsson <alexl@redhat.com>
Thu, 23 Nov 2017 09:48:29 +0000 (10:48 +0100)
gdk/broadway/broadway-protocol.h
gdk/broadway/broadway.js
gdk/broadway/broadwayd.c
gsk/gskbroadwayrenderer.c

index f1b1504463cfc7938ef16687b03b8199f77c8af3..5dd5ba354e4494244098c8b073bc2c201d17521c 100644 (file)
@@ -18,6 +18,7 @@ typedef enum { /* Sync changes with broadway.js */
   BROADWAY_NODE_ROUNDED_CLIP = 6,
   BROADWAY_NODE_LINEAR_GRADIENT = 7,
   BROADWAY_NODE_SHADOW = 8,
+  BROADWAY_NODE_OPACITY = 9,
 } BroadwayNodeType;
 
 typedef enum {
index 57565d5ad58cd0bbf3feb853d7b2c7019f0b9c63..8f056c3a1469e2e595136f21a1ab357ac444215e 100644 (file)
@@ -614,6 +614,20 @@ SwapNodes.prototype.handle_node = function(parent, offset_x, offset_y)
         }
         break;
 
+    case 9:  // OPACITY
+        {
+            var opacity = this.decode_float();
+            var div = document.createElement('div');
+            div.style["position"] = "absolute";
+            div.style["left"] = px(0);
+            div.style["top"] = px(0);
+            div.style["opacity"] = opacity;
+
+            parent.appendChild(div);
+            this.handle_node(div, offset_x, offset_y);
+        }
+        break;
+
 
     default:
         alert("Unexpected node type " + type);
index 6314ce92e4704c785daa72696f24d15e47ec8a66..7deb1142727bcca432f7992911e23f4aa7906669 100644 (file)
@@ -269,6 +269,10 @@ rewrite_node_textures (BroadwayClient *client,
     pos += n_shadows * NODE_SIZE_SHADOW;
     pos = rewrite_node_textures (client, len, data, pos);
     break;
+  case BROADWAY_NODE_OPACITY:
+    pos += NODE_SIZE_FLOAT;
+    pos = rewrite_node_textures (client, len, data, pos);
+    break;
   default:
     g_assert_not_reached ();
   }
index 49e4f7722c7b53a05e5024bd62aae82be95f7e8d..5935b22cdeaa3a4bedb40c3f4d92ba538e008685 100644 (file)
@@ -455,6 +455,16 @@ gsk_broadway_renderer_add_node (GskRenderer *self,
       }
       return;
 
+    case GSK_OPACITY_NODE:
+      {
+        add_uint32 (nodes, BROADWAY_NODE_OPACITY);
+        add_float (nodes, gsk_opacity_node_get_opacity (node));
+        gsk_broadway_renderer_add_node (self, nodes, node_textures,
+                                        gsk_opacity_node_get_child (node));
+      }
+      return;
+
+    case GSK_COLOR_MATRIX_NODE:
     case GSK_TEXT_NODE:
     default:
       break; /* Fallback */